import jira
import urllib3
from jira.exceptions import JIRAError

urllib3.disable_warnings()

# Authentication info
user_auth = ['<jira_username>', '<jira_password>']
url_server = '<jira_url>'

# Server options
options = {'server': url_server, 'max_retries': 0, 'verify': False}

try:
    jira = jira.JIRA(options, basic_auth=user_auth)
except JIRAError as e:
    if e.status_code == 401:
        print('Login to JIRA failed. Check your username and password')
        exit(1)
    else:
        print(e)

##################################################################################
# Get a single issue (specific fields can be returned)
# issue = jira.issue('ITPPP-1')
# print("Summary: " + issue.fields.summary)
# print("Description: " + issue.fields.description)
#
# issue = jira.issue('ITPPP-1', fields='summary,assignee, reporter, description')
# print("Summary: " + issue.fields.summary)
# print("Description: " + issue.fields.description)
# print("Assignee: " + issue.fields.assignee.name)
# print("Reporter: " + issue.fields.reporter.name)
###################################################################################

###################################################################################
# Get a multiple issues using the JQL - Limitation of 1000 issues
# jql = "project= IPTBT order by created ASC"
# # Item Type -> customfield_34900
# # Story Points -> customfield_27951
# issues = jira.search_issues(jql, fields='summary,description,fixVersions,customfield_34900,customfield_27951')
# for anIssue in issues:
#     print('{}: {} - {} - {}'.format(anIssue.key, anIssue.fields.summary, anIssue.fields.customfield_34900, anIssue.fields.customfield_27951))
##################################################################################

###################################################################################
# Create an issue(s)
# new_issue1 = jira.create_issue(project='IPTBT', summary='New issue from jira-python 13/02/2020',
#                               description='Look into this one jira-python 13/02/2020', issuetype={'name': 'Story'})
#
# issue_dict = {
#     'project': {'id': '42196'},
#     'summary': 'New issue from jira-python 2 13/02/2020',
#     'description': 'Look into this one 13/02/2020 2',
#     'issuetype': {'name': 'Bug'},
#     'priority': {'name': 'Critical'},
#     'assignee':{'name': '<assignee_username>'}
# }
#
# new_issue2 = jira.create_issue(fields=issue_dict)
##################################################################################

###################################################################################

# issue = jira.issue('IPTBT-12')

# # Update an issue
# issue_update_dict = {
#     'summary': 'Updated summary from python',
#     'description': 'Updated description from python',
#     # Item Type - single select
#     'customfield_34900': {'value': 'Enabler'}
# }
# issue.update(fields=issue_update_dict)
##################################################################################

###################################################################################
# Transition an issue
# Print the transitions available for the issue
# transitions = jira.transitions(issue)
# [print(t['id'], t['name']) for t in transitions]
# # jira.transition_issue(issue, '41')
###################################################################################

##################################################################################
# Assign an issue
# jira.assign_issue(issue, '<assignee_username>')
##################################################################################

###################################################################################
# Comment an issue
# comment = jira.add_comment(issue, 'comment added from python 13/02/2020')
##################################################################################
